const path = require('path')
const atmConfig = require('./atmConfig')
//插件
const HtmlWebpackPlugin = require("html-webpack-plugin")

let compileOption = {
    //入口可以配置多个，为对象语法，多页应用时可以使用  (告诉 webpack 需要多个独立的依赖图)
    entry: {
    },
    //多个入口，可以使用诸如  CommonsChunkPlugin插件是每个文件都具有唯一的名称
    output: {
        path: path.resolve(__dirname, 'dist'),
        publicPath: "./",
        filename: "[name]/[hash].js"
    },
    //定义loader,默认只能识别 javascript 以及 json
    module: {
        rules: [
            //允许多个加载程序进行执行，从下到上(从右到左)
            {test:/\.js$/, use: [
                    {loader:'babel-loader'},
                ]},
            {
                test: /\.css$/,
                use: [
                    {loader:'style-loader'},
                    {
                        loader: 'css-loader',
                        options:{
                            modules:true
                        }
                    },
                    {
                        loader: 'sass-loader'
                    }
                ]
            },
            {test: /\.ts$/, use: 'ts-loader'},
            {test: /\.less$/, use: [
                    {loader:'style-loader'},
                    {
                        loader: 'css-loader',
                        // options:{
                        //     modules:true
                        // }
                    },
                    {
                        loader: "less-loader",
                        // options: {
                        //     modules:true
                        // }
                    }
                ]},
        ]
    },
    //插件用来完成更广泛的任务,比如 包优化，资产管理，环境变量的注入
    plugins: [],
    //模式: development,production,none  webpack内置了相应特性的优化 默认值为 production
    mode: "production"
}

//自定义配置
compileOption.output.publicPath= atmConfig.contextPath

atmConfig.modules.forEach(item=>{
    let moduleName = item.name;
    let htmlName =moduleName+'/'+ item.html||moduleName+'/'+'index.html';
    let entryFile =moduleName+'/'+ item.js||moduleName+'/'+'index.js';
    let title = item.title||moduleName+'模块'
    compileOption.entry[moduleName]=path.join(__dirname,"src"+'/'+entryFile)

    compileOption.plugins.push(
        //html提供一些配置项
        new HtmlWebpackPlugin({
            template: path.join(__dirname,'./public/index.html'),
            filename: htmlName,
            title:title,
            //为false 时，所有的资源都不会注入到页面中,可选值: head,body,true,false
            inject: true,
            //为所有注入的静态资源添加webpack 每次编译产生的唯一hash值
            hash: false,
            //允许插入到模板的chunk，不配置则会注入所有chunk
            chunks: [moduleName],
            excludeChunks: []
        })
    )

})


module.exports = compileOption
